/*
  学习目标：映射类型
  作用：从旧的数据结构中，转为新的键和值类型
  理解：in 类似for in循环，会把所有的键拷贝一份
  语法： 
   {
     [key in keyof 类型]
   }

   注意：💥映射类型只能用在类型别名中，不能在interface中使用
*/

interface Person {
  name: string;
  age: string;
  // age2: string;
  // age3: string;
  // age4: string;
  // age5: string;
}

// keyof 的作用？？？

// 需求：定义一个新的类型，要求name和age是number
type NumPerson = {
  [xxx in keyof Person]: number;
};

const zs: NumPerson = {
  name: 123,
  age: 123,
};

// 练习：将所有的键改为只读类型
// 1. 先获取到所有的键，
// 2. 给所有的键，加上readonly
type MyReadonly = {
  readonly [key in keyof Person]: string;
};

const ls: MyReadonly = {
  name: '123',
  age: '456',
};

ls.name = '1231';
ls.age = '456';
